#pragma once
#include <iostream>
#include <list>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <time.h>

#include "Fish.h"
#include "Decoration.h"

class Aquarium
{
// constructors & destructors
public:
	Aquarium(void); // sets all attr's to default values
	Aquarium( std::string name, float size_w, float size_h, float size_d );
	~Aquarium(void);
// methods - gets & sets
public:
	std::string getName( void ) const;
	void setName( const std::string name );
	float getSizeW( void ) const;
	void setSizeW( const float size_w );
	float getSizeH( void ) const;
	void setSizeH( const float size_h );
	float getSizeD( void ) const;
	void setSizeD( const float size_d );
// methods regarding lists
public:
	// fish
	void addFish( void ); // random fish
	void addFish( const Fish &r );
	void addFish( const std::string name, const std::string model_path, const float scale );
	// decoration
	void addDecoration( void ); // random decoration
	void addDecoration( const Decoration &r );
	void addDecoration( const std::string name, const std::string model_path, const float pos_x, const float pos_y, const float pos_z, const float angle,
						const int axis, const float scale );
// attributes
private:
	std::string m_name;
	float m_size_w; // width
	float m_size_h; // height
	float m_size_d; // depth
// lists
private:
	std::list< Fish > m_fish_list;
	std::list< Decoration > m_decoration_list;
	std::list< std::string > m_link_list;
	std::vector< std::string > m_available_fish_vec;
	std::vector< std::string > m_available_decoration_vec;
public:
	void generateFiles( void );
};